#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#include "allones.h"
#include "getv.h"
#include "differ.h"

// 此函数已经包含输入，现在只需要return最小翻转次数
// 得到的vector diff 中的每一个元素是0或1。

int minFlips(){
    
    int flips = 0;//用变量记录翻转次数

    // 使用differ函数，记录差异环
    vector<int> diff = differ(getv(),getv());
    unsigned int n = diff.size();

    // 处理全1的特殊情况
    if(allones(diff))
        return 1;

    // 计算连续1的段数
    for (unsigned int i = 0; i < n; i++) {
        if (diff[i] == 1) {
            // 翻转从i开始的连续1段(其实并没有翻)
            while (i < n && diff[i] == 1) {
                i++;
            }
            flips++;
        }
    }

    // 检查是否首尾相连形成环形段
    if(diff[0] == 1 && diff[n-1] == 1)
        flips--;

    // 根据情况收获结果
    return flips;

}